import { writable,get } from 'svelte/store';
// readable只读属性 
/**
 * 只要a发生改变就会执行后面的$a => $a * 2
 * const doubled = derived(a, $a => $a * 2)
 */
const initialTags = {
     title:'Svelte',
     name:'Sore'
}
const gets = {
      get:'get'
}

function CreateStores(){
    // 第一种使用
    const { subscribe, set, update } = writable(initialTags);
    // 第二种使用
    const getObj = writable(gets);
    // 两种使用区别就是后者可以使用get

    // 是一种接收一个参数的回调方法。回调将现有store值作为其参数，并返回要设置为store 的新值
    // 更新 curr,为initialTags所有属性，可以将其解构并重新给其中一个属性赋值这样既是更改其中一个属性也不会影响到其他的属性
    const title = (n)=>update((curr) => ({ ...curr,title:n }));
    // set是一种接收一个参数的设置值方法。如果store值与参数值不相等，则将其设置为新参数的值
    // 重置 重置整个initialTags的内容
    const reloadTitle = ()=>set({title:'titles'});
   
    // 订阅 如果initialTags发生改变就会触发subscribe
    const subscribes = subscribe(value => {
          console.log(value);
    });
    const reloadget = (e)=>getObj.set({get:e});
 
    return {
          get,
          title,
          getObj,
          subscribes,
          reloadget,
          reloadTitle,
    }
}
const store = CreateStores();

export default store;